package com.anan;

import com.anan.exception.BusinessException;
import com.anan.utils.RedisUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.io.File;

@Component("initRun")
public class InitRun implements ApplicationRunner {

    private static final Logger logger = LoggerFactory.getLogger(InitRun.class);

    @Resource
    private DataSource dataSource;

    @Resource
    private RedisUtils redisUtils;

    @Override
    public void run(ApplicationArguments args) {  // 在springboot 启动类启动以后执行的方法 通常进行初始化操作
        try {
            dataSource.getConnection();  // 用于获取数据库连接对象。 测试是否可以获取链接对象
        } catch (Exception e) {
            logger.error("数据库连接失败，请检查配置");
            throw new BusinessException("服务器启动失败  数据库连接失败 请检查配置");
        }
        try {
            redisUtils.get("");  // 测试redis是否开启
        } catch (Exception e) {
            logger.error("redis设置失败，请检查配置");
            throw new BusinessException("服务器启动失败  redis设置失败 请检查配置 是否启动redis服务器");
        }
        logger.info("服务器启动成功!");


    }

/*这是一个名为 InitRun 的类，使用了 @Component 注解表示它是一个 Spring 组件，并实现了 ApplicationRunner 接口，表示在 Spring 应用程序启动完成后要执行的初始化操作。

在这个类中，使用了 @Resource 注解注入了两个依赖：DataSource 和 RedisComponent，这些依赖在 Spring 容器中被创建和管理。DataSource 对象表示一个数据库连接池，用于管理连接到数据库的连接；RedisComponent 对象表示一个 Redis 客户端，用于操作 Redis 数据库。

在 InitRun 类中，实现了 ApplicationRunner 接口的 run() 方法，这个方法在 Spring 应用程序启动完成后会被执行。在这个方法中，可以编写一些初始化操作，例如连接数据库、初始化数据、启动定时任务等等。这些操作可以使用注入的 DataSource 和 RedisComponent 对象进行。在执行完初始化操作后，应用程序就可以正常运行了。*/
}
